package org.andao.security.service;

import java.util.List;
import java.util.Map;

import org.andao.core.base.service.BaseService;
import org.andao.core.dao.helper.Page;
import org.andao.core.exception.ServiceException;
import org.andao.security.model.OrgUnit;



/**
 * 组织单位服务接口. 
 * 
 * @author Marco.hu(hzg139@163.com) 
 */
public interface OrgUnitService extends BaseService<OrgUnit>{
	
	/**
	 * 新增组织单位
	 * @param orgUnit
	 * @throws ServiceException
	 */
	void addOrgUnit(OrgUnit orgUnit) throws ServiceException;
	
	/**
	 * 更新组织单位
	 * @param orgUnit
	 * @throws ServiceException
	 */
	void updateOrgUnit(OrgUnit orgUnit) throws ServiceException;	
	
	/**
	 * 获取组织树
	 * @param parentcode 父编码
	 * @return
	 * @throws ServiceException
	 */
	List<OrgUnit> findOrgTree(String parentCode) throws Exception;
	
	/**
	 * 通过 parentId 获取组织架构数据
	 * @param parentId			父节点id
	 * @param containSelf		数据中是否包含本身?
	 * @param containChildrenOrg数据中是否要进行递归查询?
	 * @return
	 * @throws ServiceException
	 */
	List<OrgUnit> findOrgByParentId(String parentId, boolean containSelf, boolean containChildrenOrg) throws ServiceException;

	/**
	 * 分页列表
	 * @param condition
	 * @param order
	 * @param objPage
	 * @return
	 */
	Page findOrgByCondition(Map<String, Object> condition, Page objPage) throws ServiceException;
	
	/**
	 * 批量删除
	 * @param split
	 */
	void batchCascadeDelete(String[] split) throws ServiceException;

	/**
	 * 根据类型查找列表
	 * @param unitType
	 * @return
	 * @throws ServiceException
	 */
	List<OrgUnit> findOrgUnitListByType(String unitType) throws ServiceException;
	
	/**
	 * 获取所有子集（包括本身）
	 * @param unitMap 所有要被核对的对象，此处是所有org
	 * @param org 顶级org
	 * @return 所有子集（包括本身）
	 */
	public List<?> getAllSubUnits(String parentId,boolean includeSelf,boolean includeChildren);

}
